/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: Lenovo
 * Date: 2025-04-11
 * Time: 22:21
 */
public class Main {
    public static void main(String[] args) {
        /*综合使用*/
        //1. 格式化日期
        String date = "19491001";
        String formatted = date.replaceAll("(\\d{4})(\\d{2})(\\d{2})", "$1-$2-$3");
        System.out.println(formatted);// 输出:1949-10-01

        System.out.println("//////////////////////////");

        //2. 替换连续重复字符,目标：将连续重复的字母替换为单个字母（如 goooood → good）
        String text = "Hellooooooo, Javaaaaa!!";

        // 正则表达式 (.)\\1+ 解释：
        // (.)：匹配任意一个字符，并将这个字符保存为分组1（即 $1）（括号表示分组）。
        // \\1：反向引用，表示“重复分组1的内容”（即要求下一个字符与分组1的内容相同）。
        // +：表示前面的字符（即 \\1）出现 1次或多次。
        // 整体含义：匹配连续重复的字符（如 "ooooo" → 匹配 o 后面跟着多个 o。 "aaaa" → 匹配 a 后面跟着多个 a。）
        String result = text.replaceAll("(.)\\1+", "$1");
        //替换字符串$1的含义：$1是正则表达式中对分组1的引用，表示用分组1的内容替换匹配到的整个字符串，实现去重。
        System.out.println("原字符串：" + text);//输出：原字符串：Hellooooooo, Javaaaaa!!
        System.out.println("替换后：" + result);//输出：替换后：Helo, Java!
        /*替换过程：
        匹配第一个连续重复字符：
            字符串中的 "ll"（在 Hello 中的两个 l）：
            正则 (.)\\1+ 匹配到 "ll"。
            分组1的内容是 l（第一个 l）。
            将 "ll" 替换为 $1（即 l），结果变成 Helo（原 Hello → Helo）。
        匹配 "ooooooo"：
            正则匹配到连续的 o（共6个）。
            分组1的内容是第一个 o。
            将 "ooooooo" 替换为 $1（即 o），结果变成 Helo。
        匹配 "aaaa"：
            正则匹配到连续的 a（共4个）。
            分组1的内容是第一个 a。
            将 "aaaa" 替换为 $1（即 a），结果变成 Java（原 Javaaaaa → Java）。*/

        System.out.println("//////////////////////////");

        //3. 隐藏手机号中间4位
        String phone = "159-1234-5678";

        // 正则表达式：(\\d{3}-)\\d{4}(-\\d{4})
        // (\\d{3}-) 匹配前3位数字和短横线，分组1（$1）。
        // \\d{4} 匹配中间4位数字。
        // (-\\d{4}) 匹配后4位和短横线，分组2（$2）。
        String hidden = phone.replaceAll("(\\d{3}-)\\d{4}(-\\d{4})", "$1****$2");
        System.out.println("原始号码：" + phone);//输出：原始号码：159-1234-5678
        System.out.println("隐藏后：" + hidden);//输出：隐藏后：159-****-5678

        System.out.println("//////////////////////////");

        //4. 处理文件路径，目标：将 Windows 路径 C:\\Users\\test\\file.txt 转换为 Unix 路径 /Users/test/file.txt
        String winPath = "C:\\\\Users\\\\test\\\\file.txt";

        // 正则表达式解释：
        // 替换所有反斜杠 \\ 为正斜杠 /
        // 因为 \ 在 Java 和正则中都需要转义，所以写成\\\\\\\\
        // ^：匹配字符串的开头
        // [A-Z]：匹配任意一个大写字母（如 A、B、C）
        // ^[A-Z]:整体含义：匹配以大写字母 + 冒号（如 C:）开头的部分
        String unixPath = winPath.replaceAll("\\\\\\\\", "/")
                .replaceFirst("^[A-Z]:", ""); // 去掉盘符（如 C:）
        System.out.println("Windows路径：" + winPath);//输出：Windows路径：C:\\Users\\test\\file.txt
        System.out.println("Unix路径：" + unixPath);//输出：Unix路径：/Users/test/file.txt

        System.out.println("//////////////////////////");

        //5. 匹配多种日期格式，目标：将 1949-10-01 和 1949/10/01 统一为 1949年10月01日
        String date1 = "1949-10-01";
        String date2 = "1949/10/01";

        // 正则表达式：匹配 "-" 或 "/" 作为分隔符
        String regex = "[-/]";

        String formatted1 = date1.replaceFirst(regex, "年"); //步骤一：替换第一个分隔符为"年" ，"1949年10-01"
        String formatted2 = formatted1.replaceFirst(regex, "月") + "日"; // 步骤二：替换第二个分隔符为"月"，"1949年10月01日"

        String formatted3 = date2.replaceFirst(regex, "年"); //
        String formatted4 = formatted3.replaceFirst(regex, "月") + "日";

        System.out.println("原日期1：" + date1);//输出：原日期1：1949-10-01
        System.out.println("格式化后1：" + formatted1);//输出：格式化后1：1949年10-01
        System.out.println("格式化后2：" + formatted2);//输出：格式化后2：1949年10月01日
        System.out.println("原日期2：" + date2);//输出：原日期2：1949/10/01
        System.out.println("格式化后1：" + formatted3);//输出：格式化后1：1949年10/01
        System.out.println("格式化后2：" + formatted4);//输出：格式化后2：1949年10月01日
    }
}
/*
输出：
        1949-10-01
//////////////////////////
        原字符串：Hellooooooo, Javaaaaa!!
        替换后：Helo, Java!
//////////////////////////
        原始号码：159-1234-5678
        隐藏后：159-****-5678
//////////////////////////
        Windows路径：C:\\Users\\test\\file.txt
        Unix路径：/Users/test/file.txt
//////////////////////////
        原日期1：1949-10-01
        格式化后1：1949年10-01
        格式化后2：1949年10月01日
        原日期2：1949/10/01
        格式化后1：1949年10/01
        格式化后2：1949年10月01日*/
